import { loadingService } from './axios/loadingService'

// 定义网络请求通用类型
// type HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE'
type PromiseFunc<T> = () => Promise<T>

/**
 * 封装带loading效果的网络请求方法
 * @param promiseFunc 一个返回Promise的函数
 * @returns 处理后的Promise
 */
export async function withLoading<T>(promiseFunc: PromiseFunc<T>): Promise<T> {
  try {
    // 显示loading
    loadingService.show()

    // 执行请求
    const result = await promiseFunc()

    return result
  } catch (error) {
    // 错误会在axios拦截器中被处理和显示
    throw error
  } finally {
    // 确保关闭loading
    loadingService.hide()
  }
}

/**
 * 显示消息提示，确保只显示最后一个消息
 * @param message 消息内容
 * @param type 消息类型
 */
export function showMessage(message: string, type: 'success' | 'warning' | 'info' | 'error' = 'info'): void {
  loadingService.showMessage(message, type)
}

/**
 * 重置loading状态
 */
export function resetLoading(): void {
  loadingService.reset()
}

// 导出loadingService实例，方便直接使用
export { loadingService }
